package com.neu.utils;


import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.joda.time.DateTime;

import java.security.PrivateKey;
import java.security.PublicKey;


public class JWTUtil {

    /**
     * 用私钥生成Token，参数是原始的信息（作为JWT的负载部分，可以是用户的身份信息，权限信息），私钥，JWT的过期时间（以秒为单位）
     */
    public static String generateToken(String oriInfo, PrivateKey privateKey, int expire)  {
        // 构建JWT的Builder
        return Jwts.builder()
                .claim("info",oriInfo) // 设置负载信息
                .setExpiration(DateTime.now().plusSeconds(expire).toDate()) // 设置过期时间
                .signWith(SignatureAlgorithm.RS256,privateKey) // JWT的签名
                .compact(); // 生成紧凑形式的JWT
    }

    /**
     * 从token中获取原始信息，从JWT中提取“info”声明的值
     */
    public static String getInfoFromToken(String token, PublicKey publicKey)  {
        // 通过token和公钥解析JWT
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(publicKey).parseClaimsJws(token);
        // 获取负载的信息
        Claims body = claimsJws.getBody();
        // 提取并返回“info”声明的值
        return body.get("info")+"";
    }
}